#!/bin/bash

# Variables locales.
closethread=0 # esta es la variable de control del hilo infinito.
sleeptime=10 #10segs, arreglar este valor de ser necesario.

agencias="$grupo/data/agencias.mae"
procesados="$grupo/procesados"
recibidos="$grupo/recibidos"
rechazados="$grupo/rechazados"
configuracion="$grupo/conf/postonio.conf"


# Control de parametros
if [ $# -ge 1 ] && [ "$1" != "-c" ]; then
    exit 1       
fi  

# Verificamos si ya está corriendo.
cmd_name=`basename "$0"`
proc_count=`ps -C $cmd_name | grep $cmd_name | wc -l`

if [ $proc_count -gt 2 ]; then
    # Control de opcion para cerrar el postonio. 
    if [ $# -ge 1 ] && [ "$1" == "-c" ]; then
        # cerrar el proceso   
        #echo "closethread=1" > $configuracion
        curr_pid=`ps -C $cmd_name | grep $cmd_name | awk '{print $1}'`
        kill $curr_pid
        exit 0
    else
        exit 1
    fi    
    exit 2
fi

# Control de que el ambiente esta bien inicializado.
if [ "$installation_ok" != "1" ]; then
    exit 3
fi

# Inicia Postular si hay archivos en Recibidos
runPostularCommand(){
	postular.sh&
	
	if [ $? -ne 0 ]
	then 
        gralog.sh postonio -E "No se pudo iniciar el comando postular."
	fi
}

runPostularWhenFilesReceived(){
	count=`ls "$recibidos" | wc -l`
	if [ ${count} -gt 0 ]
	then	
		runPostularCommand
	fi
}
# -----------------
# Inicio del hilo
echo "closethread=0" > $configuracion
while [ "$closethread" = "0" ]; do
    # Procesamiento de datos.
    # -------------------------------------------------------------   
    for arriarch in `ls $ARRIDIR`; do
        if [ ! -d $arriarch ];then
            # Accion para cada archivo.

            # Validacion del formato del nombre del archivo.
            # -----------------------------------------------------
            isfilevalid=1

            # verificar formato de archivo
            isfilevalid=`echo $arriarch | grep '^[^\.]*\.[0-9]\{6,6\}$' | wc -l`

            # verificar si la secuencia es mayor a 0
            if [ $isfilevalid -eq 1 ]; then
                sequence=`echo $arriarch | sed 's/^[^\.]*\.\([0-9]*\)$/\1/'`
                if [ $sequence -gt 0 ]; then
                    isfilevalid=1
                else
                    isfilevalid=0
                fi
            fi                         

            # verificar si existe el codigo de agencia.
            if [ $isfilevalid -eq 1 ]; then
                IFS_REAL=$IFS
                IFS=`
`
                agency=`echo $arriarch | sed 's/^\(.*\)\.[0-9]\{6,6\}$/\1/'`
                grepexpression='^[^,]*,'$agency',[^,]*,[^,]*$'
                agencyexist=`cat $agencias | grep $grepexpression | wc -l` 
                isfilevalid=$agencyexist

                IFS=$IFS_REAL 
            fi                

            # verificar que no haya otro ya procesado para una misma agencia con secuencia mayor.
            if [ $isfilevalid -eq 1 ]; then
                
                # verifica en directorio de procesados
                for procarch in `ls $procesados`; do                 
                    if [ ! -d $procarch ]; then
                        procagency=`echo $procarch | sed 's/^\(.*\)\.[0-9]\{6,6\}$/\1/'`
                        procsequence=`echo $procarch | sed 's/^[^\.]*\.\([0-9]*\)$/\1/'`
       
                        if [ $agency = $procagency ]; then
                            if [ $sequence -le $procsequence ]; then
                                isfilevalid=0
                                gralog.sh postonio -A "$arriarch: Archivo fuera de secuencia."
                                break
                            fi
                        fi
                    fi
                done

                # verifica en directorio de recibidos
                for procarch in `ls "$grupo/recibidos"`; do         
                    if [ $isfilevalid -eq 0 ]; then
                        break
                    fi
       
                    if [ ! -d $procarch ]; then
                        procagency=`echo $procarch | sed 's/^\(.*\)\.[0-9]\{6,6\}$/\1/'`
                        procsequence=`echo $procarch | sed 's/^[^\.]*\.\([0-9]*\)$/\1/'`
                     
                        if [ $agency = $procagency ]; then
                            if [ $sequence -le $procsequence ]; then
                                isfilevalid=0
                                gralog.sh postonio -A "$arriarch: Archivo fuera de secuencia."
                                break
                            fi
                        fi
                    fi
                done
 
            else
                gralog.sh postonio -A "$arriarch: Nombre de archivo erróneo."
            fi            

            if [ $isfilevalid -eq 1 ]; then
                ## mover.sh el archivo a $grupo/recibidos y loguear exito
                gralog.sh postonio -A "$arriarch: Archivo valido."
                mover.sh "$ARRIDIR/$arriarch" $recibidos "postonio" 
            else
                ## mover.sh el archivo a $grupo/rechazados
                mover.sh "$ARRIDIR/$arriarch" $rechazados "postonio"
            fi
            # -----------------------------------------------------
        fi
    done
    
    # abrir postonio de ser necesario
    runPostularWhenFilesReceived

    # -------------------------------------------------------------
    # Fin de hilo.
    sleep $sleeptime

    # recarga closethread
    IFS_REAL=$IFS
    IFS=`
`
    closethread=`cat $configuracion | grep "closethread"`
    closethread=`echo $closethread | sed 's/.*=\(.\)$/\1/'`
    IFS=$IFS_REAL
done

# reset status
echo "closethread=0" > $configuracion
exit 0
